/**
 * Représente une saisie de l'utilisateur à l'écran
 * 
 * @author Marie-Hélène Goddet, Damien Finck, Cédric Schaller
 * 
 */

package fastwriting;

import java.util.List;
import java.util.Vector;

public class MotSaisi {

	private Vector<Lettre> word;
	private boolean majDebut;
	private List<Character> possible_end;
	
	/**
	 * Constructeur
	 * Initialise le mot
	 */
	public MotSaisi() {
		word = new Vector<Lettre>();
		this.setMajDebut(false);
	}
	
	public String toString() {
		String res="";
		for (int i=0;i<word.size();i++) {
			res+=word.get(i).getCar();
		}
		return res;
	}
	/**
	 * Indique si le mot n'a aucune lettre
	 * @return true si le mot est vide, false sinon
	 */
	public boolean isVide() {
		return (word.size() == 0);
	}
	/**
	 * Efface le mot
	 */
	public void clear() {
		word.clear();
	}
	/**
	 * Ajoute une lettre au mot
	 * @param car le caractère à ajouter
	 */
	public void add(char car) {
		Lettre l = new Lettre(car);
		word.add(l);
	}
	/**
	 * Indique la taille 
	 * @return le nombres de caractères dans le mot
	 */
	public int size() {
		return word.size();
	}
	/**
	 * Retourne le dernier caractère ajouté
	 * @return le dernier caractère ajouté
	 */
	public char lastCar() {
		return(word.lastElement().getCar());
	}
	/**
	 * Rajoute du temps au dernier caractère
	 */
	public void addTimeLast() {
		word.lastElement().addTime();
	}
	/**
	 * Retourne la lettre à la place i dans le mot
	 * @param i la position de la lettre
	 * @return la lettre
	 */
	public Lettre getLettre(int i) {
		return(word.get(i));
	}
	/**
	 * Retourne le caractère à la place i dans le mot
	 * @param i la position du caractère
	 * @return le caractère
	 */
	public char getCar(int i) {
		return(word.get(i).getCar());
	}
	/**
	 * Indique s'il faut une majuscule au début du mot
	 * @param majDebut true si on doit rajouter une majuscule sur la première lettre
	 */
	public void setMajDebut(boolean majDebut) {
		this.majDebut = majDebut;
	}
	/**
	 * Indique si on doit rajouter une majuscule sur la première lettre
	 * @return true si on rajoute une maj false sinon
	 */
	public boolean isMajDebut() {
		return majDebut;
	}
	/**
	 * Mets toutes les lettres déjà entrée en majuscule
	 */
	public void setAllInMaj() {
		for (int i=0;i<word.size();i++) {
			word.get(i).setCar(String.valueOf(word.get(i).getCar()).toUpperCase().charAt(0));
		}
	}
	
	/**
	 * Appelé lors du relâchement de la souris
	 * Inidique à la dernière lettre que c'est la dernière
	 */
	public void endWriting()
	{
		word.get(word.size()-1).endLetter(true);
	}

	/**
	 * Reseigne les lettres proches de la fin de la saisie
	 * @param near_end la liste des caractères proches de la fin de la saisie
	 */
	public void addPossibleEnd(List<Character> near_end) {
		this.possible_end = near_end;
	}

	/**
	 * Retourne une liste de caractères possibles pour la fin du mot
	 * @return la liste des caractères proches de la fin de la saisie
	 */
	public List<Character> getPossible_end() {
		return possible_end;
	}
	
}